package com.app.gamev2.objects

import android.graphics.PointF

/**
 * 平台对象类，定义平台的属性和方法
 */
class Platform {
    // 位置坐标（左上角）
    var position = PointF()
    // 宽度
    var width = 0f
    // 高度
    var height = 0f
    // 是否带氦气罐
    var hasBucket = false
    // 氦气罐等级
    var bucketLevel = 1
    // 是否标记为消失
    var isMarkedForRemoval = false
    // 消失倒计时（毫秒）
    private var removalCountdown = 0f
    // 移动速度（预留扩展接口）
    var moveSpeed = 0f
    // 是否在移动（预留扩展接口）
    var isMoving = false
    // 移动方向（1为右，-1为左，预留扩展接口）
    var moveDirection = 1

    /**
     * 构造函数
     * @param x X坐标
     * @param y Y坐标
     * @param width 宽度
     * @param height 高度
     */
    constructor(x: Float, y: Float, width: Float, height: Float) {
        position.x = x
        position.y = y
        this.width = width
        this.height = height
    }

    /**
     * 构造函数（带氦气罐）
     * @param x X坐标
     * @param y Y坐标
     * @param width 宽度
     * @param height 高度
     * @param bucketLevel 氦气罐等级
     */
    constructor(x: Float, y: Float, width: Float, height: Float, bucketLevel: Int) {
        position.x = x
        position.y = y
        this.width = width
        this.height = height
        this.hasBucket = true
        this.bucketLevel = bucketLevel
    }

    /**
     * 更新平台状态
     * @param deltaTime 时间间隔
     * @return 是否已消失
     */
    fun update(deltaTime: Float): Boolean {
        // 处理移动（预留扩展接口）
        if (isMoving) {
            position.x += moveSpeed * moveDirection * deltaTime
        }

        // 处理消失倒计时
        if (isMarkedForRemoval) {
            removalCountdown -= deltaTime * 1000 // 转换为毫秒
            if (removalCountdown <= 0) {
                return true // 平台已消失
            }
        }

        return false
    }

    /**
     * 标记平台为消失状态
     * @param delay 延迟时间（毫秒）
     */
    fun markForRemoval(delay: Int) {
        isMarkedForRemoval = true
        removalCountdown = delay.toFloat()
    }

    /**
     * 移除氦气罐（当玩家合并氦气罐后调用）
     */
    fun removeBucket() {
        hasBucket = false
        bucketLevel = 0
    }

    /**
     * 检查点是否在平台上
     * @param x X坐标
     * @param y Y坐标
     * @return 是否在平台上
     */
    fun containsPoint(x: Float, y: Float): Boolean {
        return x >= position.x && x <= position.x + width &&
               y >= position.y && y <= position.y + height
    }

    /**
     * 检查矩形是否与平台相交
     * @param rectX 矩形X坐标
     * @param rectY 矩形Y坐标
     * @param rectWidth 矩形宽度
     * @param rectHeight 矩形高度
     * @return 是否相交
     */
    fun intersectsWith(rectX: Float, rectY: Float, rectWidth: Float, rectHeight: Float): Boolean {
        return !(rectX > position.x + width ||
                 rectX + rectWidth < position.x ||
                 rectY > position.y + height ||
                 rectY + rectHeight < position.y)
    }
}